#ifndef DECISION_MAKER_H
#define DECISION_MAKER_H

#include "Settings.hpp"
#include "UCTSearch.hpp"

class DecisionMaker
{
    /*Functions*/
  public:
    DecisionMaker();
    DecisionMaker(int M, int N);
    ~DecisionMaker();
    void init(int M_, int N_, int **board_, const int *top_,int noX,int noY, int MAX_DEPTH_ = 7);
    /*Alpha Beta Prun*/
    int alpha_beta(); //返回当前应该下的位置
    int get_round() const { return round; }
    /*UCT*/
    int UCT_search(clock_t start); //返回最佳的列

  protected:
    /*Alpha Beta Prun*/
    int get_chess(int x, int y) const;                           //获得对应棋盘的位置
    int get_top(int column) const;                               //返回对应列的可下的位置
    int evaluate() const;                                        //评估函数
    int alpha_beta_prun(int depth, Role role, int max, int min); // alpha beta剪枝

    /*Variables*/
  protected:
    int **board; //棋盘
    int *top;    //目前所有棋子的顶端，也就是所有能走的子
    int M;       //行数
    int N;       //列数
    int no_x;    //禁止下的x
    int no_y;    //禁止下的y

    int MAX_DEPTH; //剪枝的深度
    int round;     //进行的轮数

};

#endif
